package com.hbxs.folder.modules.folder.service;

import com.hbxs.folder.bean.CustomGenericException;
import com.hbxs.folder.bean.FileBean;

import java.io.IOException;

/**
 * FastDFS操作
 * @author Administrator
 */
public interface FastFileService {

    /**
     * 上传文件
     * @param fileBean
     * @return
     */
    FileBean uploadFile(FileBean fileBean) throws CustomGenericException, IOException;

    /**
     * 获取文件元数据
     * @param fileBean
     * @return
     */
    FileBean getMetaData(FileBean fileBean);

    /**
     * 获取文件信息
     * @param fileBean
     * @return
     */
    FileBean getFileInfo(FileBean fileBean);

    /**
     * 生成文件元数据
     * @param fileBean
     * @return
     */
    FileBean overwriteMetadata(FileBean fileBean);

    /**
     * 生成文件元数据
     * @param fileBean
     * @return
     */
    FileBean mergeMetadata(FileBean fileBean);

    /**
     * 删除文件
     * @param fileBean
     */
    void deleteFile(FileBean fileBean);

    /**
     * 上传图片
     * @param fileBean
     * @return
     */
    FileBean uploadImage(FileBean fileBean) throws CustomGenericException, IOException;

    /**
     * 上传图片生成缩略图（按缩略图默认配置）
     * @param fileBean
     * @return
     */
    FileBean uploadImageAndCrtThumbImageByDefault(FileBean fileBean) throws CustomGenericException, IOException;

    /**
     * 上传图片生成缩略图（按缩略图设定尺寸）
     * @param fileBean
     * @return
     */
    FileBean uploadImageAndCrtThumbImageBySize(FileBean fileBean, Integer width, Integer height) throws CustomGenericException, IOException;
    /**
     * 上传图片生成缩略图（按缩略图设定尺寸）
     * @param fileBean
     * @return
     */
    FileBean uploadImageAndCrtThumbImageByScale(FileBean fileBean, Double percent) throws CustomGenericException, IOException;

    /**
     * 上传从文件
     * @param fileBean
     * @return
     */
    FileBean uploadSlaveFile(FileBean fileBean) throws CustomGenericException, IOException;

    /**
     * 下载文件
     * @param fileBean
     * @return
     */
    FileBean downloadFile(FileBean fileBean);

    /**
     * 下载文件片段
     * @param fileBean
     * @param fileOffset 开始位置
     * @return
     */
    FileBean downloadFile(FileBean fileBean, Long fileOffset);

    /**
     * 断点续传(上传第一段)
     * @param fileBean
     * @return
     */
    FileBean uploadAppenderFile(FileBean fileBean) throws CustomGenericException, IOException;

    /**
     * 断点续传(上传其它段)
     * @param fileBean
     * @return
     */
    FileBean appendFile(FileBean fileBean) throws IOException;

    /**
     * 清除续传类型文件
     * @param fileBean
     * @return
     */
    FileBean truncateAppendFile(FileBean fileBean) throws IOException;

    /**
     * 重新上传续传类型文件
     * @param fileBean
     * @param fileOffset 开始位置（大小截取）
     * @return
     * @throws IOException
     */
    FileBean modifyAppendFile(FileBean fileBean, Long fileOffset) throws IOException;

}
